// pages/home/home.js
const citySelector = requirePlugin('citySelector');
const plugin = requirePlugin('routePlan');
const key = 'CXIBZ-4XP6F-ND4JC-NUBU2-DVHR3-4OB6H'; // 使用在腾讯位置服务申请的key
const referer = '多力云'; // 调用插件的app的名称
var QQMapWX = require('../../utils/qqmap-wx-jssdk.js');
var qqmapsdk;

Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 当前定位
    currentLocation: '',
    // 胶囊导航
    menuBtnPosObj: {},
    // 导航栏外上边距
    styleMargin: '',
    // 是否授权定位
    isAuthorizateLocation: undefined,
  },
  /**
   * @description: 设置胶囊位置并设置列表内容外上边距
   * @param {*}
   * @return {*}
   */
  setPosition() {
    const res = wx.getMenuButtonBoundingClientRect();
    const { top, height } = res;
    const { isFollow } = this.data;
    // 非i6/7/8胶囊位置可能会被手机刘海占据一定位置，需要进行运算计算列表内容外上边距
    const styleMargin = Math.abs(436 + top - 24 + height - 32);
    this.setData({
      menuBtnPosObj: res,
      styleMargin,
    });
  },
  /**
   * @description: 获取设置信息
   * @param {*}
   * @return {*} 是否授权
   */
  getSetting() {
    let { isAuthorizateLocation } = this.data;
    wx.getSetting({
      success: (res) => {
        console.log(res);
        isAuthorizateLocation =
          typeof res.authSetting['scope.userLocation'] != 'undefined' &&
          !res.authSetting['scope.userLocation']
            ? false
            : true;
        this.setData({
          isAuthorizateLocation,
        });
      },
      fail: (err) => {
        console.log(err);
      },
    });
  },
  /**
   * @description: 获取定位并转换成地级市
   * @param {*}
   * @return {*}
   */
  getLocation() {
    wx.getLocation({
      type: 'wgs84',
      isHighAccuracy: true,
      highAccuracyExpireTime: 3500,
      success: (res) => {
        let location = {
          latitude: res.latitude,
          longitude: res.longitude,
        };
        // 经纬度-->地级市
        qqmapsdk.reverseGeocoder({
          location,
          success: (res) => {
            const { city } = res.result.ad_info;
            this.setData({
              currentLocation: city,
            });
          },
        });
      },
      fail: (err) => {
        this.isAuthorizateLocation(err);
      },
    });
  },
  /**
   * 更换定位信息
   */
  changeLocation() {
    if (this.data.isAuthorizateLocation) {
      const hotCitys = ''; // 用户自定义的的热门城市
      wx.navigateTo({
        url: `plugin://citySelector/index?key=${key}&referer=${referer}&hotCitys=${hotCitys}`,
      });
    } else {
      this.isAuthorizateLocation();
    }
  },
  /**
   * @description: 判断是否授权
   * @param {*} e
   * @return {*}
   */
  isAuthorizateLocation(e) {
    if (!this.data.isAuthorizateLocation) {
      wx.showModal({
        title: '提示',
        content: '您拒绝了定位权限，将无法使用工作推荐功能',
        success: (res) => {
          if (res.confirm) {
            // 跳转设置页面
            wx.openSetting({
              success: (res) => {
                if (res.authSetting['scope.userLocation']) {
                  // 授权成功
                  this.data.currentLocation !== ''
                    ? this.changeLocation() // 更换定位
                    : this.getLocation(); // 重新定位
                } else {
                  // 没有允许定位权限
                  wx.showToast({
                    title: '您拒绝了定位权限，将无法使用工作推荐功能',
                    icon: 'none',
                  });
                }
              },
              fail: (err) => {
                console.log(err);
              },
            });
          }
        },
      });
    }
  },
  /**
   * 获取路线信息
   */
  getRouterPlan() {
    let endPoint = JSON.stringify({
      //终点
      name: this.data.currentLocation.fullname,
      latitude: 39.89631551,
      longitude: 116.323459711,
    });
    wx.navigateTo({
      url:
        'plugin://routePlan/index?key=' +
        key +
        '&referer=' +
        referer +
        '&endPoint=' +
        endPoint,
    });
  },
  /**
   * 地图选点
   */
  chooseLocation() {},
  /**
   * 页面显示
   * @param {*} options
   */
  onLoad: function (options) {
    // 获取定位
    this.getLocation();
    // 设置导航栏
    this.setPosition();
    // 实例化API核心类
    qqmapsdk = new QQMapWX({
      key,
    });
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 获取设置信息
    setInterval(() => {
      this.getSetting();
    }, 500);

    // 回调设置定位城市
    const selectedCity = citySelector.getCity(); // 选择城市后返回城市信息对象，若未选择返回null
    let { currentLocation } = this.data;
    currentLocation = selectedCity?.fullname;
    this.setData({
      currentLocation,
    });
  },
  onUnload() {
    // 页面卸载时清空插件数据，防止再次进入页面，getCity返回的是上次的结果
    citySelector.clearCity();
  },
});
